package com.atguigu.guli.service.edu.service;

import com.atguigu.guli.service.base.dto.CourseDto;
import com.atguigu.guli.service.edu.entity.Course;
import com.atguigu.guli.service.edu.entity.form.CourseInfoForm;
import com.atguigu.guli.service.edu.entity.vo.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author Zero
 * @since 2020-05-15
 */
public interface CourseService extends IService<Course> {

    /**
     * 保存课程信息
     * @param courseInfoForm 课程信息
     * @return courseId
     */
    String saveCourseInfo(CourseInfoForm courseInfoForm);

    /**
     * 根据id查询课程信息
     * @param id id
     * @return 查询结果 CourseInfoForm
     */
    CourseInfoForm getCourseInfoById(String id);

    /**
     * 更新课程信息
     * @param courseInfoForm 课程信息封装
     */
    void updateCourseInfoById(CourseInfoForm courseInfoForm);

    /**
     * 分页条件查询课程信息
     * @param page 页码
     * @param limit 每页显示数量
     * @param courseQueryVo 查询条件
     * @return 查询结果
     */
    IPage<CourseVo> selectPage(Long page, Long limit, CourseQueryVo courseQueryVo);

    /**
     * 根据id删除课程信息封面
     * @param id 课程id
     * @return 删除结果
     */
    boolean removeCoverById(String id);

    /**
     * 根据id删除课程信息
     *
     * @param id 课程ID
     * @return 删除结果
     */
    boolean removeCourseById(String id);

    /**
     * 根据id查询课程信息
     *
     * @param id id
     * @return 查询封装
     */
    CoursePublishVo getCoursePublishVoById(String id);

    /**
     * 根据id发布课程信息
     *
     * @param id 课程id
     * @return 发布结果
     */
    boolean publishCourseById(String id);

    /**
     * 根据条件查询课程列表
     *
     * @param webCourseQueryVo 课程信息
     * @return 课程列表
     */
    List<Course> webSelectList(WebCourseQueryVo webCourseQueryVo);

    /**
     * 获取课程信息并更新浏览量
     *
     * @param courseId 课程id
     * @return 课程信息
     */
    WebCourseVo selectWebCourseVoById(String courseId);

    /**
     * 获取首页最热门前8条课程数据
     * @return 查询数据
     */
    List<Course> selectHotCourse();

    /**
     * 根据课程id查询课程信息
     * @param courseId 课程id
     * @return 课程信息
     */
    CourseDto getCourseDtoById(String courseId);

    /**
     * 更新课程销量
     * @param id 课程id
     */
    void updateBuyCountById(String id);
}
